[アップデート]Elastic BeanstalkでAWS GravitonベースのEC2インスタンスタイプがサポートされたので試してみた
こんにちはコカコーラ大好きカジです。
Elastic BeanstalkのプラットフォームでGravitonベースのEC2インスタンスタイプがサポートされましたので試してみました。
AWS GravitonはAmazonによって構築されたarm64ベースのプロセッサであり、同等のx86ベースのプロセッサと比較して最大40%優れた料金パフォーマンスを提供するものです。
ElasticBeanstalkのGravitonベースのEC2対応リージョン(2021/12現在)
- 米国東部(オハイオ)– us-east-2
- 米国東部(バージニア州北部)– us-east-1
- US West(北カリフォルニア)– us-west-1
- US West(オレゴン)– us-west-2
- ヨーロッパ(フランクフルト)– eu-central-1
- 南アメリカ(サンパウロ)– sa-east-1
GravitonベースのEC2対応プラットフォーム(2021/12現在)
- Docker running on 64bit Amazon Linux 2
- Node.js 14 running on 64bit Amazon Linux 2
- Node.js 12 running on 64bit Amazon Linux 2
- Python 3.8 running on 64bit Amazon Linux 2
- Python 3.7 running on 64bit Amazon Linux 2
- Tomcat 8.5 with Corretto 11 running on 64bit Amazon Linux 2
- Tomcat 8.5 with Corretto 8 running on 64bit Amazon Linux 2
- PHP 8.0 running on 64bit Amazon Linux 2
- PHP 7.4 running on 64bit Amazon Linux 2
- Ruby 2.7 running on 64bit Amazon Linux 2
- Go 1 running on 64bit Amazon Linux 2
Gravitonインスタンスタイプを選択可能なイメージIDについて
新規構築の場合、以下のページでGravitonインスタンスタイプをサポートする各プラットフォームのイメージIDを確認して利用しましょう。
2021/12時点のバージニアのIDを抜粋
プラットフォームバージョン | Image ID |
---|---|
64bit Amazon Linux 2 v3.4.7 running Docker | ami-0fbdb88ce139244bf |
64bit Amazon Linux 2 v4.2.6 running Tomcat 8.5 Corretto 11 | ami-00e7b90f6d15fb548 |
64bit Amazon Linux 2 v3.3.6 running PHP 8.0 | ami-04de7ac2259913496 |
試してみた
注意:サンプルアプリケーションをx86で新規環境を構築し、UpdateでGraviton切り替えています。簡易検証が目的で実施しており、言語・環境によってできない可能性が高いです。別途Graviton用のElastic beanstalk環境を作ってデプロイしてテストを行うことをオススメいたします。
詳細な手順は以下をご参照ください。
Recommendations for Graviton arm64 first wave environments
phpのサンプルアプリケーションで新規環境を構築
x86のインスタンスタイプで構築されます。
ブラウザアクセスできることを確認。
Gravitonへの切り替え
現在のところ、Gravitonの構築やアップデートはCLIでの実施となります。
構築が完了しましたら、Gravitonへの変更に必要な情報を確認します。
$ aws elasticbeanstalk describe-environments --region us-east-1 ## 抜粋です ## { "Environments": [ { "EnvironmentName": "Sampleapp-env", "ApplicationName": "sample-app", "SolutionStackName": "64bit Amazon Linux 2 v3.3.8 running PHP 8.0", <省略> } ] }
以下のコマンドで変更できました。option.jsonは下に書いています。(application-nameやenvironment-nameを上記より記載)
$ aws elasticbeanstalk update-environment \ --region us-east-1 \ --application-name sample-app \ --environment-name Sampleapp-env \ --solution-stack-name "64bit Amazon Linux 2 v3.3.8 running PHP 8.0" \ --option-settings file://option.json { "EnvironmentName": "Sampleapp-env", "EnvironmentId": "e-cjb29rgpbr", "ApplicationName": "sample-app", "VersionLabel": "Sample Application", "SolutionStackName": "64bit Amazon Linux 2 v3.3.8 running PHP 8.0", "PlatformArn": "arn:aws:elasticbeanstalk:us-east-1::platform/PHP 8.0 running on 64bit Amazon Linux 2/3.3.8", "EndpointURL": "awseb-AWSEB-hogehoge-xxxxxxxxxxx.us-east-1.elb.amazonaws.com", "CNAME": "Sampleapp-env.hogehoge.us-east-1.elasticbeanstalk.com", "DateCreated": "2021-12-03T08:20:14.315000+00:00", "DateUpdated": "2021-12-03T09:29:44.372000+00:00", "Status": "Updating", "AbortableOperationInProgress": true, "Health": "Grey", "Tier": { "Name": "WebServer", "Type": "Standard", "Version": "1.0" }, "EnvironmentArn": "arn:aws:elasticbeanstalk:us-east-1:xxxxxxxxxxxx:environment/sample-app/Sampleapp-env" }
option.json
[ { "Namespace": "aws:autoscaling:launchconfiguration", "OptionName": "IamInstanceProfile", "Value": "aws-elasticbeanstalk-ec2-role" }, { "Namespace": "aws:ec2:instances", "OptionName": "InstanceTypes", "Value": "t4g.small, t4g.micro" } ]
変更時のログなどはGUIで確認できます。
Elastic Beanstalkでのログを確認。
EC2インスタンスが切り替わっていることを確認
ブラウザで同様にアクセスを確認
最後に
東京リージョンでも利用できるようになるのが楽しみですね。